package br.com.egg.finances.view;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import br.com.egg.finances.business.dao.DAOFactory;
import br.com.egg.finances.model.Categoria;
import br.com.egg.finances.util.TextoUtils;

public class CategoriaBean extends EntityBean {

	private Categoria categoria;
	private List<Categoria> categoriaList;

	public Categoria getCategoria() {
		if (categoria == null) {
			categoria = new Categoria();
			categoria.setCdUsuario(retornaUsuarioSession().getCdUsuario());
		}
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public List<Categoria> getCategoriaList() {
		if (categoriaList == null) {
			categoriaList = DAOFactory.getCategoriaDAO().findAll(retornaUsuarioSession().getCdUsuario());
		}
		return categoriaList;
	}

	public void setCategoriaList(List<Categoria> categoriaList) {
		this.categoriaList = categoriaList;
	}
	
	public String salvarNovaCategoria() {
		try {
			trataCamposVazios(categoria);
			DAOFactory.getCategoriaDAO().insert(categoria);
			
			adicionaMensagemSucesso("Categoria salva com sucesso.");
		} catch (Exception e) {
			trataException(e);
		}
		
		categoria = null;
		categoriaList = null;
		
		return null;
	}
	
	private void trataCamposVazios(Categoria categoria) {
		if (TextoUtils.ehTextoInvalido(categoria.getCdCategoria())) {
			categoria.setCdCategoria(null);
		}
		
		if (TextoUtils.ehTextoInvalido(categoria.getCdCategoriaPai())) {
			categoria.setCdCategoriaPai(null);
		}
		
		if (TextoUtils.ehTextoInvalido(categoria.getCdUsuario())) {
			categoria.setCdUsuario(null);
		}
		
		if (TextoUtils.ehTextoInvalido(categoria.getNmCategoria())) {
			categoria.setNmCategoria(null);
		}
	}
	
	public String atualizarTodos() {
		try {
			for (Categoria categoria : categoriaList) {
				DAOFactory.getCategoriaDAO().update(categoria);
			}
			
			adicionaMensagemSucesso("Categorias atualizadas com sucesso.");
		} catch (Exception e) {
			trataException(e);
		}
		
		return null;
	}
	
	public String deletarCategoria() {
		try {
			DAOFactory.getCategoriaDAO().delete(categoria);
			
			adicionaMensagemSucesso("Categoria excluida com sucesso.");
		} catch (Exception e) {
			trataException(e);
		}
		
		categoria = null;
		categoriaList = null;
		
		return null;
	}
	
	public List<SelectItem> getCategoriaSelectItems() {
		List<SelectItem> selectItemList = new ArrayList<SelectItem>();

		List<Categoria> categorias = getCategoriaList();
		for (Categoria categoria : categorias) {
			selectItemList.add(new SelectItem(categoria.getCdCategoria(), categoria.getNmCategoria()));
		}
		
		return selectItemList;
	}

}
